from flask import Blueprint,request,jsonify,make_response,redirect
from application.models.users.user import *
user_blue = Blueprint("userblue",__name__)
import json
from application.tools.captcha.captcha import captcha
from application.tools.myredis import r
from application.tools.comm import sendMsg
import random

#测试
@user_blue.route("test")
def test():
    id = request.args.get("id")
    return jsonify({
        "code":200,
        "id":id
    })

#获取图片验证码
@user_blue.route("/sendSmsCode",methods=['POST'])
def sendSmsCode():
    data = request.data
    if data:
        data = json.loads(data)
        #获取3个参数
        uuid = data['uuid']
        piccode = data['piccode']
        mobile = data['monile']
        #通过uuid查询redis
        value = r.str_get(uuid)
        if value:
            #两个验证码进行比对，如果成功则调用平台发送短信
            #失败返回错误信息
            if piccode.lower() == value.lower():
                #验证一分钟内只能发送一次
                mcode = r.str_get(mobile)
                if mcode:
                    return jsonify({"code":10012,'msg':'一分钟内不能够重复发送验证码'})
                #生成5位随机数
                scode = random.randint(10000,99999)
                #调用短信平台
                flag = sendMsg(mobile,scode)
                if flag == True:
                    r.str_add(mobile,scode,60)
                #删除图片验证码
                r.del_str(uuid)
                #返回结果
                return jsonify({"code":200,'msg':'发送短信验证码成功'})
            else:
                return jsonify({'code':10012,"msg":'图片验证码错误'})
        else:
            return jsonify({"code":10010,"msg":'图片验证码不存在'})
        #两个验证码进行比对，如果成功则调用平台发送短信
        #失败返回错误信息

# 注册和登录接口
@user_blue.route("/login", methods=["POST"])
def login():
    # 接收前端参数
    data = request.data
    # 校验前端参数
    if data:
        # 获取 手机号，验证码
        mobile = data.get("mobile")
        code = data.get("code")
        # 查询出redis数据库存储的验证码
        mcode = r.str_get("mobile")
        # 校验验证码是否存在
        if mcode:
            # 校验短信验证码是否正确
            if code == mcode:
                # 查询手机号是否存在
                user = User.query.filter_by(User.mobile == mobile).first()
                # 判断是否获取过来数据
                if user:
                    # 删除redis中存储的短信验证码
                    r.str_del(mobile)
                # 如果不存在，就进行添加该用户
                else:
                    u = User(mobile=mobile)
                    db.session.add(u)
                    db.session.commit()
                    user = User.query.filter_by(User.mobile == mobile, User.nikename == mobile).first()
                # 用户信息生成token
                token = random.randint(10000, 99999)
                # 返回信息给页面
                return jsonify({'code': 10000, 'token': token, 'userid': user.id})

            # 返回短信验证码错误
            else:
                return jsonify({"code": 10003, 'msg': '短信验证码错误'})
        # 如果验证码不存在返回结果
        else:
            return jsonify({"code": 10001, "meg": "短信验证码不存在"})
    # 返回参数错误
    return jsonify({"code": 10002, 'meg': "请输入，正确的数据"})

#获取weibo地址
@user_blue.route("/getwburl")
def  getwburl():
    client_id="3674019597"
    redirect_uri="http://127.0.0.1:8000/user/weiboCallback/"
    url = "https://api.weibo.com/oauth2/authorize?client_id=%s&response_type=code&redirect_uri=%s"%(client_id,redirect_uri)
    return jsonify({"code":200,"url":url})

#webo回调接口
@user_blue.route("weboCallback")
def weiboCallbock():
    #获取code
    code = request.args.get("code")
    #向access_token接口发送post请求
    data = {"clientid":'3674019597',"client_secret":"7ae99bc0d54ead29fc8d1b9fabd78587",
    "grant_type":"authorizayion_code",
    "redirect_uri":'http://127.0.0.1:8000/user/weiboCallback/','code':code}
    res = request.post('https://api.weibo.com/oauth2/access token',data=data)
    #解析参数， token uid
    mes = json.loads(res.text)
    token = mes['access_token']
    uid = mes['uid']
    #查询第三方登陆中的uid是否存在，如果存在，查询用户表，用用户信息生成token跳转到vue页面
    sql = "select id from user inner join sf_login on user_id=sf_login.userid where sf_login.uid='%s'"%(uid)
    user = db.session.execute(sql)
    if user:
        pass
    else:

        #不存在跳转到vue绑定页面， token uid传递过去
        return redirect("http://localhost:8080/#/bindMobile?uid="+uid+"&token="+token)
@user_blue.route("/reg",methods=['POST','GET'])
def reg():
    if request.method == 'POST':
        data = json.loads(request.data)
        name = data['name']